home *** CD-ROM | disk | FTP | other *** search
- Datenstruktur zur Abfrage und Anzeige zusätzlicher Möglichkeiten der
- seriellen (und evtl. sonstiger) Kommunikationsroutinen
- ====================================================================
-
- Cookie
- ------
- Name: RSVF (RS232 Version Fast)
- Wert: Zeiger auf Datenstruktur
- Zeiger muβ <>0 sein und auf gerade Adresse weisen
-
- Datenstruktur
- -------------
- Beliebig viele Objekte sind als Liste hintereinander abgelegt. An das Ende
- einer Liste kann über eine Verkettung eine weitere Liste angehängt sein.
- Am Ende der letzten Liste befindet sich eine Ende-Kennung.
-
- Objekt
- ------
- Jedes Objekt ist 8 Byte lang und beginnt auf einer geraden Adresse.
- Byte 0..3 sind ein Zeiger auf den Namen der Schnittstelle (Filename) im
- ASCII-Code. Der Name muß auf einer geraden Adresse beginnen und ist
- nullterminiert.
- Byte 4..7 enthalten Angaben über die Eigenschaften des Objektes (der
- Schnittstelle). Noch nicht definierte Bits/Bytes müssen vom anlegenden
- Programm auf 0 gesetzt werden.
- Sollten irgendwann zusätzliche Informationen nötig werden, so wird deren
- Vorhandensein auf noch zu definierende Weise in Byte 4..7 angezeigt. Die
- Informationen selbst liegen dann vor dem Namen der Schnittstelle.
-
- Besondere Objekte
- -----------------
- Bei besonderen Objekten ist Byte4.Bit7 =0.
- Ende-Objekt:
- Byte 0..3 0, ein NIL-Zeiger, kennzeichnet das Ende der Datenstuktur
- Verkettungsobjekt:
- Byte 0..3 Zeiger auf die nächste Liste mit Objekten.
-
- Eigenschaftsdefinitionen im Wert
- --------------------------------
- Byte 4:
- Bit7 =1: dieser Name ist eine Schnittstelle
- Bit6 =1: Schnittstelle ist dem GEMDOS für File-I/O bekannt
- Bit5 =1: Schnittstelle ist dem BIOS bekannt (Bco*-Routinen)
- für den Rest fällt uns noch was ein (Fähigkeiten der Schnittstelle)
- Byte 5:
- noch frei
- Byte 6:
- BIOS-Nummer der Schnittstelle (Bco*-Routinen)
- Byte 7:
- noch frei
-
-
- Sinn und Zweck
- --------------
- Kommunikationsprogramme können durch RSVF herausfinden, welche
- Schnittstellen für sie geeignet erscheinen. Außerdem erfahren sie die
- Zuordnung von GEMDOS-Gerätetreibername (in U:\DEV\) zur BIOS-Gerätenummer.
-
-
- Mindestforderung an Treiber bei gesetztem GEMDOS-Bit
- ----------------------------------------------------
- Fopen, Fclose, Fread, Fwrite, Fcntl werden behandelt. Falls eine Funktion
- (oder auch Unterfunktion von Fcntl) nicht vorhanden ist, muβ dafür ein
- Fehlercode (mglst. Fehlercode -32 (EINVFN)) geliefert werden.
-
- Fopen darf immer nur mit dem vollen Pfad "U:\DEV\devicename" erfolgen.
- Konstruktionen mit Dsetdrv und Dsetpath sind UNZULÄSSIG.
-
- Fcntl hat die Funktionsnummer $0104 und die Parameter:
- handle, special, subfunction
- handle: 16Bit filehandle
- special: 32Bit parameter for subfunction
- subfunction: 16Bit number of subfunction
-
-
- MiNT-kompatible Funktionen der Treiber
- --------------------------------------
- Fopen für Lesen&Schreiben auf "U:\DEV\MODEM1" und natürlich Fclose.
- Fwrite und Fread sind nichtblockierend, d.h. es werden immer nur soviel Byte
- übertragen, wie der serielle Puffer aufnehmen/liefern kann. So sollten auch
- andere Treiber arbeiten.
-
- Rückgabewert der Fcntl-Funktionen ist 0 für fehlerfreie Durchführung oder
- ein negativer Fehlercode (32Bit-Wert), falls nicht extra beschrieben.
-
- Manche Zeilen sind C, manche Kommentar. Bei den angegebenen
- Funktionsaufrufen handelt es sich wirklich um Musteraufrufe, und nicht etwa
- um mißgestaltete Prototypen.
-
-
-
- Ermittlung, wieviel Byte nichtblockierend übertragen werden können
- ------------------------------------------------------------------
- #define FIONREAD (('F'<< 8) | 1)
- #define FIONWRITE (('F'<< 8) | 2)
- long Fcntl( handle, &count, FIONREAD)
- long Fcntl( handle, &count, FIONWRITE)
- In count wird als 32Bit-Wert die Anzahl der Byte hinterlassen, die beim
- nächsten Fread/Fwrite mindestens gelesen/geschrieben werden können. Da aber
- möglicherweise mehrere Programme auf einen Port schreiben könnten, sollte
- man nur den Returnwert von Fread/Fwrite für voll nehmen. (Anmerkung: meine
- Treiber liefern richtige Werte, mir bekannte MiNT-Versionen aber nur
- entweder 0 oder 1, so daß man unter MiNT momentan hiervon nicht viel hat.)
-
-
- Setzen und Rücksetzen von Break
- -------------------------------
- #define TIOCCBRK (('T'<< 8) | 20)
- #define TIOCSBRK (('T'<< 8) | 21)
- Fcntl( handle, dummy, TIOCSBRK); /* Break aktivieren */
- Fcntl( handle, dummy, TIOCCBRK); /* Break löschen */
-
-
- Setzen/Abfragen der Eingabegeschwindigkeit und Steuerung der DTR-Leitung
- ------------------------------------------------------------------------
- #define TIOCIBAUD (('T'<< 8) | 18)
- Fcntl( handle, &speed, TIOCIBAUD);
- Setze die Eingabegeschwindigkeit der Schnittstelle. In speed steht ein
- 32Bit-Wert, der die gewünschte Geschwindigkeit unkodiert in Bit pro Sekunde
- angibt. speed = 19200 würde auf 19200bps setzen. In speed wird die
- Geschwindigkeit vor dem Aufruf von TIOCIBAUD zurückgegeben. Ist sie
- unbekannt, wird -1 geliefert. Ist beim Aufruf speed = -1, so wird nur die
- Geschwindigkeit erfragt. Ist speed = 0, so wird das DTR-Signal auf inaktiv
- gebracht (gelöscht), ohne die Geschwindigkeit zu beeinflussen. Bei
- geschwindigkeitssetzendem Aufruf wird DTR automatisch aktiviert.
- Rückgabewert ist ERANGE wenn die Geschwindigkeit nicht einstellbar ist.
- Dann wird als "Ausnahme" in speed die nächstniedrigere mögliche
- Geschwindigkeit geliefert. Gibt es keine nächstniedrige, so wird die
- kleinstmögliche zurückgegeben.
-
-
- Setzen/Abfragen der Ausgabegeschwindigkeit und Steuerung der DTR-Leitung
- ------------------------------------------------------------------------
- #define TIOCOBAUD (('T'<< 8) | 19) Fcntl( handle, &speed, TIOCOBAUD);
- Setze die Ausgabegeschwindigkeit der Schnittstelle. Die
- Funktionsbeschreibung ist identisch zu TIOCIBAUD. Unterstützt eine
- Schnittstelle getrennte Ein- und Ausgabegeschwindigkeit nicht, so
- beeinflußt jeder Aufruf beide Geschwindigkeiten.
-
-
- Übertragungsprotokolleinstellungen erfragen
- -------------------------------------------
- #define TIOCGFLAGS (('T'<< 8) | 22)
- Fcntl( handle, &flags, TIOCGFLAGS);
- Liefert in flags einen 16Bit-Wert der eingestellten Parameter, die eine
- ODER-Verknüpfung der folgenden Werte darstellen. Alle anderen Bit sind
- reserviert. Bei TIOCGFLAGS sollte man sie ignorieren. Sinnvollerweise
- erfragt man mit TIOCGFLAGS, modifiziert die bekannten Werte, und setzt dann
- per TIOCSFLAGS.
-
- /* Anzahl der Stoppbits */
- #define TF_STOPBITS 0x0003
- /* 0x0000 nicht erlaubt (Anmerkung: Meine Wenigkeit schlägt vor, damit
- einen evtl. vorhandenen Synchronmode zu aktivieren.) */
- #define TF_1STOP 0x0001 /* 1 Stoppbit */
- #define TF_15STOP 0x0002 /* 1.5 Stoppbit */
- #define TF_2STOP 0x0003 /* 2 Stoppbit */
-
- /* Anzahl der Bits pro Zeichen */
- #define TF_CHARBITS 0x000C
- #define TF_8BIT 0x0 /* 8 Bit */
- #define TF_7BIT 0x4
- #define TF_6BIT 0x8
- #define TF_5BIT 0xC /* 5 Bit */
-
- /* Handshakemodi und Parität */
- #define TF_FLAG 0xF000
- #define T_TANDEM 0x1000 /* XON/XOFF (=^Q/^S) Flußkontrolle aktiv */
- #define T_RTSCTS 0x2000 /* RTS/CTS Flußkontrolle aktiv */
- #define T_EVENP 0x4000 /* even (gerade) Parität aktiv */
- #define T_ODDP 0x8000 /* odd (ungerade) Parität aktiv */
- /* even und odd schließen sich gegenseitig aus */
-
-
- Übertragungsprotokolleinstellungen setzen
- -----------------------------------------
- #define TIOCSFLAGS (('T'<< 8) | 23)
- Fcntl( handle, &flags, TIOCSFLAGS);
- Setzt die Einstellungen, Beschreibung dieser bei TIOCGFLAGS. Rückgabewert
- ist ERANGE bei illegaler / nicht unterstützer Kombination in flags.
-
-
- Weitere Funktionen
- ------------------
- Erweiterte Funktionen zum Einstellen der Schnittstelle, zur Überwachung
- der Signalleitungen (z.B. DCD, RING), zum Löschen der Sende- und
- Empfangspuffer sind im Textfile
-
- SERSOFST.TXT
-
- definiert. Einige werden von meinen Treibern schon unterstützt. Siehe
- SERSOFST.TXT zu Einzelheiten und zum Status dieses (noch? nicht
- Atari-offiziellen) Standards. Wer besonders dringend die eine oder andere
- Funktion braucht, darf sich gern mit mir in Verbindung setzen.
-
-
- Harun Scheutzow, 16.05.1993
- letzte Änderung: 21.11.1993
-
- Harun_Scheutzow@B.maus.de
-
- Harun Scheutzow
- Dresdener Straße 83
- D-10179 Berlin, Deutschland
-
-